home *** CD-ROM | disk | FTP | other *** search
- // xorTraining.cpp
- // Automatically generated from breadboard by NeuroSolutions.
-
- #include "NSLib.h"
-
-
- void saveAllWeights(char *weightsFilePath);
- BOOL networkStopped=FALSE;
- unsigned short int weightFileVersion=225;
- BOOL forceBackpropLearning=FALSE, backpropLearningOn=TRUE;
-
- // Component Construction
- Axon inputAxon;
- File inputFile;
- BackAxon inputAxonBackprop;
- FullSynapse hidden1Synapse;
- BackFullSynapse hidden1SynapseBackprop;
- Momentum hidden1SynapseBackpropGradient;
- TanhAxon hidden1Axon;
- BackTanhAxon hidden1AxonBackprop;
- Momentum hidden1AxonBackpropGradient;
- FullSynapse outputSynapse;
- BackFullSynapse outputSynapseBackprop;
- Momentum outputSynapseBackpropGradient;
- TanhAxon outputAxon;
- BackTanhAxon outputAxonBackprop;
- Momentum outputAxonBackpropGradient;
- L2Criterion criterion;
- BackCriteriaControl criterionBackprop;
- File desiredFile;
- File activeCostProbe;
-
- int main() {
- srand((unsigned)time(NULL));
-
- // Component Initialization
- inputAxon.setRows(2);
- inputFile.setFilePath("inputFile.bin");
- inputFile.setMode(READ,BINARY);
- inputFile.setSpatialDimension(2,1);
- inputAxonBackprop.setRows(2);
- hidden1SynapseBackpropGradient.setDefaultMomentum(6.999999880790710e-001f);
- hidden1SynapseBackpropGradient.setDefaultStepSize(3.000000119209290e-001f);
- hidden1SynapseBackpropGradient.setIndividualSteps(FALSE);
- hidden1SynapseBackpropGradient.setStepDivisor(4);
- hidden1Axon.setRows(2);
- hidden1AxonBackprop.setOffset(1.000000047497451e-003f);
- hidden1AxonBackprop.setRows(2);
- hidden1AxonBackpropGradient.setDefaultMomentum(6.999999880790710e-001f);
- hidden1AxonBackpropGradient.setDefaultStepSize(3.000000119209290e-001f);
- hidden1AxonBackpropGradient.setIndividualSteps(FALSE);
- hidden1AxonBackpropGradient.setStepDivisor(4);
- outputSynapseBackpropGradient.setDefaultMomentum(6.999999880790710e-001f);
- outputSynapseBackpropGradient.setDefaultStepSize(3.000000119209290e-001f);
- outputSynapseBackpropGradient.setIndividualSteps(FALSE);
- outputSynapseBackpropGradient.setStepDivisor(4);
- outputAxon.setRows(1);
- outputAxonBackprop.setOffset(1.000000047497451e-003f);
- outputAxonBackprop.setRows(1);
- outputAxonBackpropGradient.setDefaultMomentum(6.999999880790710e-001f);
- outputAxonBackpropGradient.setDefaultStepSize(3.000000119209290e-001f);
- outputAxonBackpropGradient.setIndividualSteps(FALSE);
- outputAxonBackpropGradient.setStepDivisor(4);
- criterion.setRows(1);
- criterionBackprop.setRows(1);
- desiredFile.setFilePath("desiredFile.bin");
- desiredFile.setMode(READ,BINARY);
- desiredFile.setSpatialDimension(1,1);
- activeCostProbe.setMode(WRITE,STANDARD);
- activeCostProbe.setSpatialDimension(1,1);
- FILE *loadStream = fopen("xorTraining.nsw","r");
- if (!loadStream) {
- fprintf(stderr, "Could not open weight file xorTraining.nsw");
- exit(1);
- }
- weightFileVersion = getWeightFileVersion(loadStream);
-
- // Load Normalization Coefficients of Files
- inputFile.loadWeights(seekComponent(loadStream, "File", "inputFile"),weightFileVersion);
- desiredFile.loadWeights(seekComponent(loadStream, "File", "desiredFile"),weightFileVersion);
-
- // Component Interconnection
- inputAxon.setPreActivityAccess(&inputFile);
- inputAxonBackprop.setDual(&inputAxon);
- hidden1SynapseBackprop.setDual(&hidden1Synapse);
- hidden1AxonBackprop.setDual(&hidden1Axon);
- outputSynapseBackprop.setDual(&outputSynapse);
- outputAxonBackprop.setDual(&outputAxon);
- criterion.setCostAccess(&activeCostProbe);
- criterion.setDesiredAccess(&desiredFile);
- criterionBackprop.setDual(&criterion);
- inputAxon.setNext(&hidden1Synapse);
- inputAxonBackprop.setLast(&hidden1SynapseBackprop);
- hidden1Synapse.setLast(&inputAxon);
- hidden1Synapse.setNext(&hidden1Axon);
- hidden1SynapseBackprop.setLast(&hidden1AxonBackprop);
- hidden1SynapseBackprop.setNext(&inputAxonBackprop);
- hidden1Axon.setLast(&hidden1Synapse);
- hidden1Axon.setNext(&outputSynapse);
- hidden1AxonBackprop.setLast(&outputSynapseBackprop);
- hidden1AxonBackprop.setNext(&hidden1SynapseBackprop);
- outputSynapse.setLast(&hidden1Axon);
- outputSynapse.setNext(&outputAxon);
- outputSynapseBackprop.setLast(&outputAxonBackprop);
- outputSynapseBackprop.setNext(&hidden1AxonBackprop);
- outputAxon.setLast(&outputSynapse);
- outputAxon.setNext(&criterion);
- outputAxonBackprop.setLast(&criterionBackprop);
- outputAxonBackprop.setNext(&outputSynapseBackprop);
- criterion.setLast(&outputAxon);
- criterionBackprop.setNext(&outputAxonBackprop);
- hidden1SynapseBackpropGradient.setErrorSoma(&hidden1SynapseBackprop);
- hidden1AxonBackpropGradient.setErrorSoma(&hidden1AxonBackprop);
- outputSynapseBackpropGradient.setErrorSoma(&outputSynapseBackprop);
- outputAxonBackpropGradient.setErrorSoma(&outputAxonBackprop);
- fclose(loadStream);
-
- // Get Ready to Run Network
- int updateCounter=0;
- criterion.fireGetReady();
-
- // Run Network
- int epochs = 100;
- int exemplars = 4;
- int epochsPerCV = 0;
- int exemplarsPerUpdate = 4;
- for (int epoch=0; epoch<epochs; epoch++) {
- for (int exemplar=0; exemplar<exemplars; exemplar++) {
- inputAxon.fire();
- if (backpropLearningOn || forceBackpropLearning) {
- inputAxonBackprop.backpropStarting();
- hidden1SynapseBackprop.backpropStarting();
- hidden1AxonBackprop.backpropStarting();
- outputSynapseBackprop.backpropStarting();
- outputAxonBackprop.backpropStarting();
- criterionBackprop.backpropStarting();
- criterionBackprop.fire();
- inputAxonBackprop.backpropComplete();
- hidden1SynapseBackprop.backpropComplete();
- hidden1AxonBackprop.backpropComplete();
- outputSynapseBackprop.backpropComplete();
- outputAxonBackprop.backpropComplete();
- criterionBackprop.backpropComplete();
- if (++updateCounter >= exemplarsPerUpdate) {
- hidden1SynapseBackpropGradient.updateWeights(&hidden1Synapse);
- hidden1AxonBackpropGradient.updateWeights(&hidden1Axon);
- outputSynapseBackpropGradient.updateWeights(&outputSynapse);
- outputAxonBackpropGradient.updateWeights(&outputAxon);
- updateCounter = 0;
- }
- forceBackpropLearning = FALSE;
- }
- if (networkStopped) {
- criterion.reportCost();
- goto ConcludeFiring;
- }
- }
- NSFloat cost5 = criterion.reportCost();
- criterion.m_bIgnoreNextError = FALSE;
- criterion.epochEnded();
- if (networkStopped)
- goto ConcludeFiring;
- }
-
- ConcludeFiring:
-
- saveAllWeights("xorTraining.nsw");
-
- return 0;
- }
-
- void saveAllWeights(char *weightsFilePath)
- { FILE *saveStream = fopen(weightsFilePath,"w");
- if (!saveStream) {
- fprintf(stderr, "Could not open weight file %s\n", weightsFilePath);
- exit(1);
- }
- writeWeightFileVersion(saveStream);
- inputFile.saveWeights(putComponent(saveStream, "File", "inputFile"));
- desiredFile.saveWeights(putComponent(saveStream, "File", "desiredFile"));
- inputAxon.saveWeights(putComponent(saveStream, "Axon", "inputAxon"));
- hidden1Synapse.saveWeights(putComponent(saveStream, "FullSynapse", "hidden1Synapse"));
- hidden1SynapseBackprop.saveWeights(putComponent(saveStream, "BackFullSynapse", "hidden1SynapseBackprop"));
- hidden1Axon.saveWeights(putComponent(saveStream, "TanhAxon", "hidden1Axon"));
- outputSynapse.saveWeights(putComponent(saveStream, "FullSynapse", "outputSynapse"));
- outputSynapseBackprop.saveWeights(putComponent(saveStream, "BackFullSynapse", "outputSynapseBackprop"));
- outputAxon.saveWeights(putComponent(saveStream, "TanhAxon", "outputAxon"));
- criterion.saveWeights(putComponent(saveStream, "L2Criterion", "criterion"));
- hidden1SynapseBackpropGradient.saveWeights(putComponent(saveStream, "Momentum", "hidden1SynapseBackpropGradient"));
- hidden1AxonBackpropGradient.saveWeights(putComponent(saveStream, "Momentum", "hidden1AxonBackpropGradient"));
- outputSynapseBackpropGradient.saveWeights(putComponent(saveStream, "Momentum", "outputSynapseBackpropGradient"));
- outputAxonBackpropGradient.saveWeights(putComponent(saveStream, "Momentum", "outputAxonBackpropGradient"));
- fclose(saveStream);
- }
-
-